package ThreadingSafety;

import java.util.Timer;
import java.util.TimerTask;

/**
 *  标准库中的 定时器:
 */
public class TestDemo22 {
    public static void main(String[] args) {
        // 标准库中的定时器: java.util 包中的Timer
        Timer timer = new Timer();
        // 匿名内部类的写法.
        timer.schedule(new TimerTask() {
            //schedule有两个参数, 第一个表示安排的任务是啥, 第二个表示 多长时间(毫秒级别)之后来执行.
            //其中第一个参数 TimerTask task, 其实就是 Runnable接口(创建多线程的时候讲过)
            //我们要做的就是 继承TimerTask,重写run方法,从而指定要执行的任务.
            long start = System.currentTimeMillis();
            @Override
            public void run() {
                System.out.println("时间到,快起床!");
                long end = System.currentTimeMillis();

                System.out.println(end - start);
            }
        }, 3000);
        // 一个定时器可以安排多个任务, 这是任务2:
        timer.schedule(new TimerTask() {
            //schedule有两个参数, 第一个表示安排的任务是啥, 第二个表示 多长时间(毫秒级别)之后来执行.
            //其中第一个参数 TimerTask task, 其实就是 Runnable接口(创建多线程的时候讲过)
            //我们要做的就是 继承TimerTask,重写run方法,从而指定要执行的任务.
            long start = System.currentTimeMillis();
            @Override
            public void run() {
                System.out.println("时间到2,快起床!");
                long end = System.currentTimeMillis();

                System.out.println(end - start);
            }
        }, 4000);
        // 任务3
        timer.schedule(new TimerTask() {
            //schedule有两个参数, 第一个表示安排的任务是啥, 第二个表示 多长时间(毫秒级别)之后来执行.
            //其中第一个参数 TimerTask task, 其实就是 Runnable接口(创建多线程的时候讲过)
            //我们要做的就是 继承TimerTask,重写run方法,从而指定要执行的任务.
            long start = System.currentTimeMillis();
            @Override
            public void run() {
                System.out.println("时间到3,快起床!");
                long end = System.currentTimeMillis();

                System.out.println(end - start);
            }
        }, 5000);

        System.out.println("开始计时!");


        // 如果只有以上代码, 执行后发现我们的进程并没有结束!!!
        // 是因为 Timer 内部需要一组进程来执行注册的任务,而这个进程是
        // 前台线程, 会影响我们的线程退出(只要有一个前台线程,也叫守护线程,进程就不会结束).
        // 这时手动结束进程即可~~
        //那么让我们自己实现一个Timer, 感受以下这里的多线程的使用~~( TestDemo23中)
    }
}
